/**
 * tsconfig 配置中 strictFunctionTypes 这一项配置，在文档中的描述：
 * 在比较两个函数类型是否兼容时，将对函数参数进行更严格的检查（When enabled, this flag causes functions parameters to be checked more correctly），
 * 实际上，这里的更严格指的即是 对函数参数类型启用逆变检查，
*/


/**
 * 如果启用了 strictFunctionTypes 这个配置才是逆变检查，那么默认是什么样的？
 * 在默认情况下，对函数参数的检查采用 双变（ bivariant ） ，即逆变与协变都被认为是可接受的。
 * tsconfig下的strictFunctionTypes已开启
*/
class Animal {
    asPet() { }
}
class Dog extends Animal {
    bark() { }
}
class Corgi extends Dog {
    cute() { }
}

function fn(dog: Dog) {
    dog.bark();
}
type CorgiFunc = (input: Corgi) => void;
type AnimalFunc = (input: Animal) => void;
const func1: CorgiFunc = fn;
const func2: AnimalFunc = fn;


//export {}：解决“无法重新声明块范围变量”错误提示问题
export { }